Julia 内联
阐述
内联一个函数可以减少函数调用的开支,并且增加优化的可能性。但是,内联函数也会导致
- 运行时开支:增加内存占用、减少内存局域性、减少预测成功概率
- 编译时开支:更复杂的 IR
在 Julia 中,对函数会评估其内联代价,小于 100 的函数将被内联,否则就不会。
如果要改变默认的内联方式,可以在定义时或者调用时加上 @inline
或者 @noinline
宏。调用时的优先级比定义时的高。
@inline
:将代价的限制提高了 20 倍@noinline
:可以保证不内联
一个例外是:如果调用参数是具体的,则 @inline
一定会内联。这是由于如果调用参数不具体,可以通过具体的运行时类型加上函数屏障来获得更好的性能。可以用下面的方式来检验:
isdispatchtuple(T)
实例
性质
相关内容
参考文献
https://aviatesk.github.io/posts/inlining-101/ https://discourse.julialang.org/t/forcing-inline/20225/5